Large-scale web-based applications may use a distributed storage system to store application data such as data about its users, customers, internal state, etc. Existing storage systems for web-based applications include both traditional database systems that generally feature use of the Standard Query Language (SQL) and “NoSQL” storage systems that do not use SQL. SQL is a well-known and widely-used query interface featuring powerful functionality via use of a declarative language that is more concise than imperative programming languages, such that a few lines of SQL may equate to hundreds of lines of code used to implement the same functionality using a NoSQL system.
In general, traditional database systems using SQL are difficult and expensive to scale because they utilize costly special hardware and/or have high overhead (e.g., expensive system administrators to partition data and tune performance). Over the past ten years, however, many companies that develop and utilize large-scale web applications have replaced traditional SQL database systems with specialized custom-built storage systems without SQL that feature better performance, better scalability, and reduced costs (both hardware and overhead). However, these “NoSQL” storage systems provide only a subset of the functionality available in traditional SQL database systems. For example, NoSQL storage systems may lack joins, subqueries, secondary keys, aggregation, and other features offered by SQL.
Consequently, web applications utilizing NoSQL storage systems that need this missing functionality must provide it themselves, which in turn increases the effort and cost of developing such applications for operation with NoSQL storage system. Furthermore, NoSQL storage systems generally feature custom interfaces and query languages that are specific to that storage system (i.e., are non-standard and ad-hoc); as a result, web applications developed to use one specific NoSQL system may not work with other NoSQL storage systems without significant changes being made to such web applications to make them compatible with the custom interface and query language featured by the other NoSQL storage system.